import java.util.*;

/**
 * @author LKQ
 * @date 2022/5/18 15:54
 * @description 难点1，防止溢出，那么需要用long
 * 难点2：判断无限循环，用哈希表记录出现重复的被除数
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.fractionToDecimal(4, 333);
    }
    public String fractionToDecimal(int numerator, int denominator) {
        StringBuffer sb = new StringBuffer();
        long a = numerator, b = denominator;
        if (a * b < 0) {
            // 结果为负数
            sb.append("-");
        }
        a = Math.abs(a); b = Math.abs(b);
        // 整数部分
        sb.append(a / b);
        if (a % b == 0) {
            return sb.toString();
        }
        // 小数部分
        sb.append(".");
        Map<Long, Integer > map = new HashMap<>();
        while ((a = (a % b) * 10) > 0 && !map.containsKey(a)) {
            map.put(a, sb.length());
            sb.append(a / b);
        }
        if (a == 0) {
            return sb.toString();
        }
        return sb.insert(map.get(a).intValue(), '(').append(')').toString();
    }
}
